"""
try except...finally：无论是否发生异常都执行，与Java中finally一样，一般用来关闭资源
"""
try:
    a = input("请输入被除数：")
    b = input("请输入除数：")
    c = float(a) / float(b)
    print(c)
except ZeroDivisionError:
    print("异常：除数不能为0")
except ValueError:
    print("异常：除数和被除数都应该为数值类型")
except BaseException as e:
    print(e)
    print(type(e))
else:
    print("正常执行，结果是：", c)
finally:
    print("有异常我执行，无异常我也执行")

print("程序结束")

# 文件读取
try:
    f = open("d:/a.txt", 'r')
    content = f.readline()
    print(content)
except BaseException as e:
    print(e)
finally:
    f.close()  # 释放资源。此处也可能会发生异常。若发生异常，则程序终止, 不会继续往下执行
print("step4")

"""
关于return的位置:由于 return 有两种作用：结束方法运行、返回值。我们一般不把 return放到异常处理结构中，而是放到方法最后。
"""


def test01():
    print("step1")
    try:
        x = 3 / 0
    # return "a"
    except:
        print("step2")
        print("异常：0不能做除数")
        # return "b"
    finally:
        print("step4")
        # return "d"
    print("step5")
    return "e"  # 一般不要将return语句放到try、except、else、finally块中，会发生一些意想不到的错误。建议放到方法最后。


print(test01())
